package com.baitengsoft.patentservicemonitor.api.service;

import com.baitengsoft.patentservicemonitor.api.entity.CfgPatentIndicatorEntity;
import com.baitengsoft.patentservicemonitor.api.entity.PacPatentinfoEntity;
import com.baitengsoft.patentservicemonitor.api.entity.CfgIpcEntity;
import com.baitengsoft.patentservicemonitor.api.model.ApplicantInfoModel;
import com.baitengsoft.patentservicemonitor.api.model.PacPatentInfoCountModel;

import java.util.List;

/**
 * Created by 周俊 on 2018/1/3.
 */
public interface SystemBaseService {

    /**
     * 创建临时表
     * @param tableName 临时表名
     */
    void createNewTable(String tableName);

    /**
     * 删除临时表
     * @param tableName 临时表名
     */
    void dropTable(String tableName);

    /**
     * 获取所有状态为（1：启动，2：试用）的平台
     */
    List<Integer> queryWebPlatformList();

    /**
     * 获取某个平台所有状态为（1：正常）的区域
     * @param PlatformID 所属平台ID
     */
    List<Integer> queryWebPlatformAreaList(Integer PlatformID);

    /**
     * 获取区域对应年月的专利指标，理论上讲根据年月和区域ID，返回的list只有一条记录
     * @param DateYM 年月
     * @param AreaID 区域ID
     */
    List<CfgPatentIndicatorEntity> queryCfgPatentIndicatorList(Integer DateYM, Integer AreaID);

    /**
     * 根据区域ID获取平台ID
     * @param ID 区域id
     */
    Integer queryPlatformIdByAreaId(Integer ID);

    /**
     * 根据平台ID获取平台类型
     * @param ID 平台id
     */
    Integer queryPlatformTypeByPlatformId(Integer ID);
    /**
     * 获取区域对应年月所有状态为（1：正常）的专利
     * @param AreaID 区域ID
     * @param PlatformID 所属平台ID
     * @param ApplyPerson 权利人名称
     * @param ApplyPersonType 权利人类型
     * @param PatAddressLast 权利人地址
     */
    List<PacPatentinfoEntity> queryPacPatentinfoList(Integer AreaID, Integer PlatformID,String ApplyPerson,Integer ApplyPersonType,String PatAddressLast);

    /**
     * 更新权利人ID
     * @param PlatformID 平台id
     * @param ID 专利ID
     * @param ApplyID 权利人ID
     */
    void updatePacPatentInfoById(Integer ID,Integer PlatformID,Integer ApplyID);

    /**
     * 获取pac_patentinfo表的汇总数据
     * @param AreaID 区域ID
     * @param PlatformID 平台id
     * @param StartDate 申请、授权开始日期
     * @param EndDate 申请、授权结束日期
     */
    List<PacPatentInfoCountModel> queryPacPatentinfoCount
    (Integer AreaID,Integer PlatformID, String StartDate, String EndDate);

    /**
     * 获取IPC分类（条件为ParentID = 0）中第一大类
     * @param ParentID IPC父ID
     */
    List<CfgIpcEntity> queryCfgIpcList(Integer ParentID);

    /**
     * 获取pac_patentinfo表的汇总数据，针对rpt_patent_ipc表
     * @param PlatformID 平台id
     * @param IPCId IPC的CODE首字母
     */
    List<PacPatentInfoCountModel> queryPacPatentinfoForIpcCount(Integer PlatformID, String IPCId);

    /**
     * 获取pac_patentinfo表的汇总数据，针对rpt_inventor表
     * @param PlatformID 平台id
     */
    List<PacPatentInfoCountModel> queryPacPatentinfoForInventorCount(Integer PlatformID);

    /**
     * 获取pac_patentinfo表的汇总数据，针对rpt_applicant表
     * @param PlatformID 平台id
     * @param DataType 数据范围：1当前有效量，2专利总量
     */
    List<PacPatentInfoCountModel> queryPacPatentinfoForAgencyCount(Integer PlatformID,Integer DataType);

    /**
     * 获取pac_patentinfo表的权利人汇总数据，针对rpt_applicant表
     * @param AgencyName 代理机构名称
     * @param PlatformID 平台id
     * @param DataType 数据范围：1当前有效量，2专利总量
     */
    Integer queryPacPatentinfoForAgencyApplyPersonCount(String AgencyName,Integer PlatformID,Integer DataType);

    /**
     * 更新所属平台的落地专利信息的区域ID（区县级）
     * @param PlatformID 平台id
     */
    void updatePacPatentInfo(Integer PlatformID);

    /**
     * 更新所属平台的落地专利信息的区域ID(市级及以上平台)
     * @param PlatformID 平台id
     */
    void updatePacPatentInfoCity(Integer PlatformID);

    /**
     * 更新所属平台的落地专利信息的区域ID（区县级）
     * @param PlatformID 平台id
     */
    void updatePacPatentInfoOut(Integer PlatformID);

    /**
     * 更新所属平台的落地专利信息的区域ID(市级及以上平台)
     * @param PlatformID 平台id
     */
    void updatePacPatentInfoOutCity(Integer PlatformID);

    /**
     * 插入权利人临时表数据
     * @param PlatformID 平台id
     * @param StartDate 申请、授权开始日期
     * @param EndDate 申请、授权结束日期
     */
    void saveTempRptApplicant(Integer PlatformID,String StartDate, String EndDate);

    /**
     * 获取一个平台的所有权利人
     * @param PlatformID 平台id
     */
    List<ApplicantInfoModel> queryApplicantInfoList(Integer PlatformID);

    /**
     * 删除权利人临时表数据
     * @param PlatformID 平台id
     */
    void deleteTempRptApplicant(Integer PlatformID);

    /**
     * 更新转出专利信息表中权利人ID
     * @param PlatformID 平台id
     */
    void updatePacPatentInfoOutApplyId(Integer PlatformID);

    /**
     * 更新转入专利信息表中权利人ID
     * @param PlatformID 平台id
     */
    void updatePacPatentInfoApplyId(Integer PlatformID);


    /**
     * 获取权利人临时表中的数据
     * @param ApplyPerson 权利人名称
     * @param ApplyPersonType 权利人类型
     * @param PatAddressLast 权利人地址
     */
    List<PacPatentInfoCountModel> queryPacPatentinfoForApplicantList(String ApplyPerson,Integer ApplyPersonType,String PatAddressLast);
}
